package webserver;

import java.io.*;

/**
 *In dieser Klasse sind alle Fehler auf die der Webserver reagiert hinterlegt.
 *
 * @author Daniel
 */
public class Status {

    /**
     * In diesem Container werden alle Fehlerfälle verwaltet
     */
    public enum Statuscodes {
        /**
         * Code 200 wird zurückgegeben
         */
        CODE200 {
            @Override
            public String toString() {
                return "200 OK";
            }
        },
        /**
         * Code 304 wird zurückgegeben
         */
        CODE304 {
            @Override
            public String toString() {
                return "304 Not Modified";
            }
        },
        /**
         * Code 400 wird zurückgegeben
         */
        CODE400{
            @Override
            public String toString() {
                return "400 Bad Request";
            }
        },
        /**
         * Code 404 wird zurückgegeben
         */
        CODE404 {
            @Override
            public String toString() {
                return "404 Not Found";
            }
        },
        /**
         * Code 412 wird zurückgegeben
         */
        CODE412 {
          @Override
          public String toString() {
              return "412 Precondition Failed";
          }
        },
        /**
         * Code 415 wird zurückgegeben
         */
        CODE415 {
            @Override
            public String toString() {
                return "415 Unsupported Media Type";
            }
        },
        /**
         * Code 500 wird zurückgegeben
         */
        CODE500 {
            @Override
            public String toString() {
                return "500 Internal Servererror";
            }
        },
        /**
         * Code 501 wird zurückgegeben
         */
        CODE501 {
            @Override
            public String toString() {
                return "501 Not Implemented";
            }
        }
    }

    private static Status status;

    private Status() {

    }

    /**
     * Klasse als Singelton.
     * @return Objekt
     */
    public static synchronized Status getInstance() {

        if(status == null) {
            status = new Status();
        }

        return status;

    }

    /**
     * Rückgabe des aktuellen Statuscodes als String.
     * @param code
     * @return ErrorNumber
     */
    public String getStatusCode(int code) {

        String statusStr;

        switch(code) {
            case 200: statusStr = Statuscodes.CODE200.toString(); break;
            case 304: statusStr = Statuscodes.CODE304.toString(); break;
            case 400: statusStr = Statuscodes.CODE400.toString(); break;
            case 404: statusStr = Statuscodes.CODE404.toString(); break;
            case 412: statusStr = Statuscodes.CODE412.toString(); break;
            case 415: statusStr = Statuscodes.CODE415.toString(); break;
            case 501: statusStr = Statuscodes.CODE501.toString(); break;
            default: statusStr = "500 Internal Server Error";
        }

        return statusStr;
    }

}
